package com.hzit.controller;

import cn.hutool.http.server.HttpServerResponse;
import com.hzit.entity.R;
import com.hzit.entity.User;
import com.hzit.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.security.access.prepost.PostFilter;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.access.prepost.PreFilter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@Controller
@RequestMapping("/user")
@Slf4j
public class UserController {
	@Autowired
	private IUserService userService;

	//1. 查询用户列表
	@GetMapping("/list")
	@ResponseBody
	public R list(){
		List<User> list = userService.list();
		return R.ok().put("list",list);
	}
	//2. 查询单个用户
	// @PreAuthorize：如果权限不满足，则不会执行方法体语句！
	// @PostAuthorize: 执行完方法体后，才执行权限的验证！（不常用）
	@GetMapping("/findById")
	@ResponseBody
	// @Secured("ROLE_sale111")             // 判断是否有角色ROLE_sale，有就可以访问
	// @PreAuthorize("hasAuthority('admin111')")  // 代表有admin权限就可以访问此资源
	// @PreAuthorize("hasAnyAuthority('aaa','bb','admin11')")    // 代表有其中一种权限就可访问资源
	// @PostAuthorize("hasAnyAuthority('aa','bb','admin11')")
	public R findById(Integer id){
		log.info("user---->findById()调用！");
		User user = userService.getById(id);
		log.info("user = {}",user);
		return R.ok().put("user",user);
	}

	@GetMapping("/list2")
	@ResponseBody
	// @PostFilter("filterObject.username == 'bb'")    // 将返回结果中的username值为bb的保存下来并返回，筛选掉username=aa
	public List<User> findAll2(){
		List<User> list = new ArrayList<>();
		list.add(new User(1,"aa","111"));
		list.add(new User(2,"bb","222"));
		return list;
	}
	@GetMapping("/list3")
	@ResponseBody
	@PreFilter("filterObject.username == 'aa'")
	public List<User> findAll3(@RequestBody  List<User> users){
		return users;
	}

	//3. 无权访问页面
	@GetMapping("unauth")
	@ResponseBody
	public R unauth(){
		return R.error(HttpStatus.FORBIDDEN.value(),"对不起，你无权访问此页面！");
	}

}
